package br.com.dp.dao.entidade;

import java.io.Serializable;
import javax.persistence.*;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the cliente database table.
 * 
 */
@Entity
@Table(name="cliente")
@NamedQuery(name="Cliente.findAll", query="SELECT c FROM Cliente c")
public class Cliente implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(unique=true, nullable=false)
	private int idUsuario;

	@Temporal(TemporalType.DATE)
	private Date dataNascimento;

	@Lob
	private byte[] fotoPerfil;

	@Column(length=45)
	private String passaporte;

	@Column(nullable=false)
	private int pontos;

	@Column(nullable=false, length=1)
	private String sexo;

	@Column(length=15)
	private String telefone;

	//bi-directional many-to-one association to Cartao
	@OneToMany(mappedBy="cliente")
	private List<Cartao> cartaos;

	//bi-directional many-to-one association to Endereco
	@ManyToOne
	@JoinColumn(name="idEndereco")
	private Endereco endereco;

	//bi-directional one-to-one association to Usuario
	@OneToOne
	@JoinColumn(name="idUsuario", nullable=false, insertable=false, updatable=false)
	private Usuario usuario;

	//bi-directional many-to-many association to Nacionalidade
	@ManyToMany(mappedBy="clientes")
	private List<Nacionalidade> nacionalidades;

	//bi-directional many-to-one association to Relacionamento
	@OneToMany(mappedBy="cliente1")
	private List<Relacionamento> relacionamentos1;

	//bi-directional many-to-one association to Relacionamento
	@OneToMany(mappedBy="cliente2")
	private List<Relacionamento> relacionamentos2;

	//bi-directional many-to-one association to Reserva
	@OneToMany(mappedBy="cliente")
	private List<Reserva> reservas;

	public Cliente() {
	}

	public int getIdUsuario() {
		return this.idUsuario;
	}

	public void setIdUsuario(int idUsuario) {
		this.idUsuario = idUsuario;
	}

	public Date getDataNascimento() {
		return this.dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public byte[] getFotoPerfil() {
		return this.fotoPerfil;
	}

	public void setFotoPerfil(byte[] fotoPerfil) {
		this.fotoPerfil = fotoPerfil;
	}

	public String getPassaporte() {
		return this.passaporte;
	}

	public void setPassaporte(String passaporte) {
		this.passaporte = passaporte;
	}

	public int getPontos() {
		return this.pontos;
	}

	public void setPontos(int pontos) {
		this.pontos = pontos;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public List<Cartao> getCartaos() {
		return this.cartaos;
	}

	public void setCartaos(List<Cartao> cartaos) {
		this.cartaos = cartaos;
	}

	public Cartao addCartao(Cartao cartao) {
		getCartaos().add(cartao);
		cartao.setCliente(this);

		return cartao;
	}

	public Cartao removeCartao(Cartao cartao) {
		getCartaos().remove(cartao);
		cartao.setCliente(null);

		return cartao;
	}

	public Endereco getEndereco() {
		return this.endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Usuario getUsuario() {
		return this.usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public List<Nacionalidade> getNacionalidades() {
		return this.nacionalidades;
	}

	public void setNacionalidades(List<Nacionalidade> nacionalidades) {
		this.nacionalidades = nacionalidades;
	}

	public List<Relacionamento> getRelacionamentos1() {
		return this.relacionamentos1;
	}

	public void setRelacionamentos1(List<Relacionamento> relacionamentos1) {
		this.relacionamentos1 = relacionamentos1;
	}

	public Relacionamento addRelacionamentos1(Relacionamento relacionamentos1) {
		getRelacionamentos1().add(relacionamentos1);
		relacionamentos1.setCliente1(this);

		return relacionamentos1;
	}

	public Relacionamento removeRelacionamentos1(Relacionamento relacionamentos1) {
		getRelacionamentos1().remove(relacionamentos1);
		relacionamentos1.setCliente1(null);

		return relacionamentos1;
	}

	public List<Relacionamento> getRelacionamentos2() {
		return this.relacionamentos2;
	}

	public void setRelacionamentos2(List<Relacionamento> relacionamentos2) {
		this.relacionamentos2 = relacionamentos2;
	}

	public Relacionamento addRelacionamentos2(Relacionamento relacionamentos2) {
		getRelacionamentos2().add(relacionamentos2);
		relacionamentos2.setCliente2(this);

		return relacionamentos2;
	}

	public Relacionamento removeRelacionamentos2(Relacionamento relacionamentos2) {
		getRelacionamentos2().remove(relacionamentos2);
		relacionamentos2.setCliente2(null);

		return relacionamentos2;
	}

	public List<Reserva> getReservas() {
		return this.reservas;
	}

	public void setReservas(List<Reserva> reservas) {
		this.reservas = reservas;
	}

	public Reserva addReserva(Reserva reserva) {
		getReservas().add(reserva);
		reserva.setCliente(this);

		return reserva;
	}

	public Reserva removeReserva(Reserva reserva) {
		getReservas().remove(reserva);
		reserva.setCliente(null);

		return reserva;
	}

}